<template>
  <Modal v-model="modal" title="任务列表" width="1000" footer-hide class-name="vertical-center-modal">
    <Card :bordered="false" dis-hover v-if="modal">
      <Form
        ref="formValidate"
        inline
        :model="formValidate"
        :label-width="labelWidth"
        :label-position="labelPosition"
        class="tabform"
        @submit.native.prevent
      >
        <FormItem label="操作时间：">
          <DatePicker
            :editable="false"
            @on-change="onchangeTime"
            :value="timeVal"
            format="yyyy/MM/dd"
            type="datetimerange"
            placement="bottom-start"
            placeholder="自定义时间"
            :options="options"
           class="width20"
          ></DatePicker>
        </FormItem>
        <FormItem label="类型：">
          <Select
            v-model="formValidate.type"
            clearable
            @on-change="typeSearchs"
            class="width20"
          >
            <Option
              v-for="item in typeList"
              :value="item.value"
              :key="item.value"
              >{{ item.label }}</Option
            >
          </Select>
        </FormItem>
        <FormItem label="状态：">
          <Select
            v-model="formValidate.status"
            clearable
            @on-change="statusSearchs"
            class="width20"
          >
            <Option
              v-for="item in statusList"
              :value="item.value"
              :key="item.value"
              >{{ item.label }}</Option
            >
          </Select>
        </FormItem>
      </Form>
      <Table
        class="mt25"
        height="500"
        :columns="columns1"
        :data="data1"
        :loading="loading"
      >
        <template slot-scope="{ row, index }" slot="action">
          <template v-if="row.is_show_log">
            <a @click="deliveryLook(row)">查看</a>
            <Divider type="vertical" />
          </template>
          <template>
            <Dropdown @on-click="changeMenu(row, $event)">
              <a>更多<Icon type="ios-arrow-down"></Icon></a>
              <DropdownMenu slot="list">
                <DropdownItem name="1" v-if="[7, 8, 9, 10].includes(row.type)"
                  >下载</DropdownItem
                >
                <DropdownItem name="2" v-if="row.status == 1">重新执行</DropdownItem>
                <DropdownItem v-if="row.is_stop_button" name="3"
                  >停止任务</DropdownItem
                >
                <DropdownItem name="4">清除任务</DropdownItem>
              </DropdownMenu>
            </Dropdown>
          </template>
        </template>
      </Table>
      <div class="acea-row row-right page">
        <Page
          :total="page1.total"
          :current="page1.pageNum"
          show-elevator
          show-total
          @on-change="pageChange"
          @on-page-size-change="limitChange"
          :page-size="page1.pageSize"
          show-sizer
        />
      </div>
    </Card>
    <Modal v-model="modal1" width="900" footer-hide>
      <Table
        height="500"
        class="mt25"
        :columns="columns4"
        :data="data2"
        :loading="loading2"
      ></Table>
      <div class="acea-row row-right page">
        <Page
          :total="page2.total"
          :current="page2.pageNum"
          show-elevator
          show-total
          @on-change="pageChange2"
          @on-page-size-change="limitChange2"
          :page-size="page2.pageSize"
          show-sizer
        />
      </div>
    </Modal>
    <!-- </div> -->
  </Modal>
</template>

<script>
import {
  queueIndex,
  deliveryLog,
  queueAgain,
  queueDel,
  batchOrderDelivery,
  stopWrongQueue,
} from "@/api/order";
import { mapState } from "vuex";
import exportExcel from "@/utils/newToExcel.js";
export default {
  data() {
    return {
      modal: false,
      columns1: [
        {
          title: "ID",
          key: "id",
        },
        {
          title: "操作时间",
          key: "add_time",
        },
        {
          title: "发货单数",
          key: "total_num",
        },
        {
          title: "成功发货单数",
          key: "success_num",
        },
        {
          title: "发货类型",
          key: "title",
        },
        {
          title: "状态",
          key: "status_cn",
        },
        {
          title: "操作",
          slot: "action",
          width: 150,
          align: "center",
        },
      ],
      data1: [],
      page1: {
        total: 0, // 总条数
        pageNum: 1, // 当前页
        pageSize: 10, // 每页显示条数
      },
      formValidate: {
        type: "",
        status: "",
        data: "",
      },
      options: {
        shortcuts: [
          {
            text: "今天",
            value() {
              const end = new Date();
              const start = new Date();
              start.setTime(
                new Date(
                  new Date().getFullYear(),
                  new Date().getMonth(),
                  new Date().getDate()
                )
              );
              return [start, end];
            },
          },
          {
            text: "昨天",
            value() {
              const end = new Date();
              const start = new Date();
              start.setTime(
                start.setTime(
                  new Date(
                    new Date().getFullYear(),
                    new Date().getMonth(),
                    new Date().getDate() - 1
                  )
                )
              );
              end.setTime(
                end.setTime(
                  new Date(
                    new Date().getFullYear(),
                    new Date().getMonth(),
                    new Date().getDate() - 1
                  )
                )
              );
              return [start, end];
            },
          },
          {
            text: "最近7天",
            value() {
              const end = new Date();
              const start = new Date();
              start.setTime(
                start.setTime(
                  new Date(
                    new Date().getFullYear(),
                    new Date().getMonth(),
                    new Date().getDate() - 6
                  )
                )
              );
              return [start, end];
            },
          },
          {
            text: "最近30天",
            value() {
              const end = new Date();
              const start = new Date();
              start.setTime(
                start.setTime(
                  new Date(
                    new Date().getFullYear(),
                    new Date().getMonth(),
                    new Date().getDate() - 29
                  )
                )
              );
              return [start, end];
            },
          },
		  {
		    text: "上月",
		    value() {
		      const end = new Date();
		      const start = new Date();
		  	const day = new Date(start.getFullYear(), start.getMonth(), 0).getDate();
		      start.setTime(
		        start.setTime(
		          new Date(new Date().getFullYear(), new Date().getMonth()-1, 1)
		        )
		      );
		  	end.setTime(
		  	  end.setTime(
		  	    new Date(new Date().getFullYear(), new Date().getMonth()-1, day)
		  	  )
		  	);
		      return [start, end];
		    },
		  },
          {
            text: "本月",
            value() {
              const end = new Date();
              const start = new Date();
              start.setTime(
                start.setTime(
                  new Date(new Date().getFullYear(), new Date().getMonth(), 1)
                )
              );
              return [start, end];
            },
          },
          {
            text: "本年",
            value() {
              const end = new Date();
              const start = new Date();
              start.setTime(
                start.setTime(new Date(new Date().getFullYear(), 0, 1))
              );
              return [start, end];
            },
          },
        ],
      },
      timeVal: [],
      typeList: [
        // {
        //     label: '批量发放用户优惠券',
        //     value: '1'
        // },
        // {
        //     label: '批量设置用户分组',
        //     value: '2'
        // },
        // {
        //     label: '批量设置用户标签',
        //     value: '3'
        // },
        // {
        //     label: '批量下架商品',
        //     value: '4'
        // },
        // {
        //     label: '批量删除商品规格',
        //     value: '5'
        // },
        {
          label: "批量删除订单",
          value: "6",
        },
        {
          label: "批量手动发货",
          value: "7",
        },
        {
          label: "批量打印电子面单",
          value: "8",
        },
        {
          label: "批量配送",
          value: "9",
        },
        {
          label: "批量虚拟发货",
          value: "10",
        },
      ],
      statusList: [
        {
          label: "未处理",
          value: "0",
        },
        {
          label: "处理中",
          value: "1",
        },
        {
          label: "已完成",
          value: "2",
        },
        {
          label: "处理失败",
          value: "3",
        },
      ],
      columns2: [
        {
          title: "订单ID",
          key: "order_id",
        },
        {
          title: "物流公司",
          key: "delivery_name",
        },
        {
          title: "物流单号",
          key: "delivery_id",
        },
        {
          title: "处理状态",
          key: "status_cn",
        },
        {
          title: "异常原因",
          key: "error",
        },
      ],
      columns3: [
        {
          title: "订单ID",
          key: "order_id",
        },
        {
          title: "备注",
          key: "fictitious_content",
        },
        {
          title: "处理状态",
          key: "status_cn",
        },
        {
          title: "异常原因",
          key: "error",
        },
      ],
      columns5: [
        {
          title: "订单ID",
          key: "order_id",
        },
        {
          title: "配送员",
          key: "delivery_name",
        },
        {
          title: "配送员电话",
          key: "delivery_id",
        },
        {
          title: "处理状态",
          key: "status_cn",
        },
        {
          title: "异常原因",
          key: "error",
        },
      ],
      columns4: [],
      data2: [],
      page2: {
        total: 0, // 总条数
        pageNum: 1, // 当前页
        pageSize: 12, // 每页显示条数
      },
      modal1: false,
      deliveryLog: null,
      deliveryLogId: 0,
      deliveryLogType: "",
      loading: false,
      loading2: false,
    };
  },
  computed: {
    ...mapState("admin/layout", ["isMobile"]),
    labelWidth() {
      return this.isMobile ? undefined : 96;
    },
    labelPosition() {
      return this.isMobile ? "top" : "right";
    },
  },
  created() {
    this.getQueue();
  },
  methods: {
    getQueue() {
      let data = {
        page: this.page1.pageNum,
        limit: this.page1.pageSize,
      };
      if (this.formValidate.status) {
        data.status = this.formValidate.status;
      }
      if (this.formValidate.type) {
        data.type = this.formValidate.type;
      }
      if (this.formValidate.data) {
        data.data = this.formValidate.data;
      }
      this.loading = true;
      queueIndex(data)
        .then((res) => {
          this.loading = false;
          this.data1 = res.data.list;
          this.page1.total = res.data.count;
        })
        .catch((err) => {
          this.loading = false;
        });
    },
    pageChange(index) {
      this.page1.pageNum = index;
      this.getQueue();
    },
    // 查看-分页
    pageChange2(index) {
      this.page2.pageNum = index;
      this.getDeliveryLog();
    },
    limitChange(limit) {
      this.page1.pageSize = limit;
      this.getQueue();
    },
    limitChange2(limit) {
      this.page2.pageSize = limit;
      this.getDeliveryLog();
    },
    // 搜索-操作时间
    onchangeTime(time) {
      this.timeVal = time;
      this.formValidate.data = this.timeVal[0] ? this.timeVal.join("-") : "";
      this.page1.pageNum = 1;
      this.getQueue();
    },
    // 搜索-类型
    typeSearchs() {
      this.page1.pageNum = 1;
      this.getQueue();
    },
    // 搜索-状态
    statusSearchs() {
      this.page1.pageNum = 1;
      this.getQueue();
    },
    // 查看-获取数据
    getDeliveryLog() {
      this.loading2 = true;
      deliveryLog(this.deliveryLogId, this.deliveryLogType, {
        page: this.page2.pageNum,
        limit: this.page2.pageSize,
      })
        .then((res) => {
          this.loading2 = false;
          this.data2 = res.data.list;
          this.page2.total = res.data.count;
        })
        .catch((err) => {
          this.loading2 = false;
        });
    },
    // 查看
    deliveryLook(row) {
      this.modal1 = true;
      this.deliveryLogId = row.id;
      this.deliveryLogType = row.cache_type;
      this.deliveryLog = row;
      switch (row.type) {
        case 7:
        case 8:
          this.columns4 = this.columns2;
          break;
        case 9:
          this.columns4 = this.columns5;
          break;
        case 10:
          this.columns4 = this.columns3;
          break;
      }
      this.getDeliveryLog();
    },
    // 更多
    changeMenu(row, $event) {
      switch ($event) {
        // 下载
        case "1":
          this.exports(row.id, row.type, row.cache_type);
          break;
        // 重新执行
        case "2":
          this.queueAgain(row.id, row.type);
          break;
        // 停止任务
        case "3":
          this.$Modal.confirm({
            title: "谨慎操作",
            content: "<p>确认停止该任务？</p>",
            onOk: () => {
              this.stopQueue(row.id);
            },
          });
          break;
        // 清除异常任务
        case "4":
          this.queueDel(row.id, row.type);
          break;
      }
    },
    // 数据导出；
    async exports(id, type, cache_type) {
      let [th, filekey, data, fileName] = [[], [], [], ""];
      let lebData = await this.getExcelData(id, type, cache_type);
      if (!fileName) fileName = lebData.filename;
      if (!filekey.length) {
        filekey = lebData.filekey;
      }
      if (!th.length) th = lebData.header;
      data = lebData.export;
      exportExcel(th, filekey, fileName, data);
    },
    getExcelData(id, type, cache_type) {
      return new Promise((resolve, reject) => {
        batchOrderDelivery(id, type, cache_type).then((res) => {
          return resolve(res.data);
        });
      });
    },
    // 重新执行
    queueAgain(id, type) {
      queueAgain(id, type)
        .then((res) => {
          this.$Message.success(res.msg);
          this.getQueue();
        })
        .catch((err) => {
          this.$Message.error(err.msg);
        });
    },
    // 清除异常任务
    queueDel(id, type) {
      queueDel(id, type)
        .then((res) => {
          this.$Message.success(res.msg);
          this.getQueue();
        })
        .catch((err) => {
          this.$Message.error(err.msg);
        });
    },
    // 停止任务
    stopQueue(id) {
      stopWrongQueue(id)
        .then((res) => {
          this.$Message.success(res.msg);
          this.getQueue();
        })
        .catch((err) => {
          this.$Message.error(err.msg);
        });
    },
  },
};
</script>

<style></style>
